//
// Created by xqyr on 2025/4/13.
//

#include "log.h"
#include <stdlib.h>
#include <sys/stat.h>
#include <string.h>
zlog_category_t *c = NULL;

#define LOG_CONFIG_FILE "/home/user/.config/zlog.conf"

int crateLogConf() {
    // 创建目录 /home/user/.config
    const char *config_dir = "/home/user/.config";
    struct stat st;

    // 检查目录是否存在
    if (stat(config_dir, &st) == 0) {
        // 目录已存在
        //printf("目录 %s 已存在\n", config_dir);
    } else {
        // 目录不存在，尝试创建
        if (system("mkdir -p /home/user/.config") != 0) {
            perror("创建目录失败");
            return 1;
        } else {
            //printf("目录 %s 创建成功\n", config_dir);
        }
    }

    // 创建文件 /home/user/.config/zlog.conf 并写入数据
    const char *config_file = "/home/user/.config/zlog.conf";
    FILE *file = fopen(config_file, "r");
    if (file != NULL) {
        // 文件已存在，关闭文件
        fclose(file);
        return 0;
        //printf("文件 %s 已存在\n", config_file);
    }
    else {
        // 文件不存在，尝试创建并写入数据
        file = fopen(config_file, "w");
        if (file == NULL) {
            perror("创建文件失败");
            return 1;
        }

        // 写入数据
        fprintf(file,
                "[global]\n"
                "strict init = true\n"
                "buffer min = 1024\n"
                "buffer max = 2MB\n"
                "rotate lock file = /tmp/zlog.lock\n"
                "default format = \"%%d.%%us %%V [%%f:%%L:%%U] %%m%%n\"\n"
                "\n"
                "[formats]\n"
                "simple = \"%%d.%%us %%V [%%f:%%L:%%U] %%m%%n\"\n"
                "\n"
                "[rules]\n"
                "my_cat.DEBUG >stdout; simple\n");
    }

    fclose(file);
    return 0;
}

int initLog() {
    if(crateLogConf()) return -1;
    int rc = zlog_init(LOG_CONFIG_FILE);
    if (rc) {
        printf("zlog init failed!\n");
        return -2;
    }
   c = zlog_get_category("my_cat");
    if (!c) {
        printf("get cat fail\n");
        zlog_fini();
        return -3;
    }

    return 0;
}

int endLog() {
    zlog_fini();
    return 0;
}
